package com.ymatou.iapi.optrade.parameter.vo;

import java.math.BigDecimal;

import com.ymatou.iapi.optrade.parameter.enums.BondedAreaEnum;
import com.ymatou.iapi.optrade.parameter.enums.PriceTypeEnum;
import com.ymatou.iapi.optrade.parameter.enums.ProductRefundChannelEnum;
import com.ymatou.iapi.optrade.parameter.enums.SalesTypeEnum;
import com.ymatou.iapi.optrade.parameter.enums.StockStatusEnum;

/**
 * 订单里商品项
 *
 */
public class OrderItemVo {

	// 商品ID
	private String productId;

	// 商品规格ID
	private String catalogId;

	// 备货状态
	private StockStatusEnum stockStatus;

	// 商品总数量（神器订单中，productNum = 真实库存 + 虚拟库存）
	private int productNum;

	// 一级目录ID
	private long firstCategoryId;

	// 二级目录ID
	private long secondCategoryId;

	// 三级目录ID
	private long thirdCategoryId;

	// 商品品牌ID
	private long brandId;

	//商品图片Url
	private String pictureUrl;

	//商品属性信息(按JSON格式存储，如--颜色:黑色,尺寸:XXS)
	private String property;

	//商品名称
	private String productName;

	//外部sku
	private String sku;

	// 商品备案号
	private String productRecordNo;

	// 商品销售类型
	private SalesTypeEnum salesType;

	// 商品成交价
	private BigDecimal productPrice;

	// 商品原价
	private BigDecimal originalPrice;

	// 成交价类型
	private PriceTypeEnum priceType;

	// 关税承担类型(0-卖家承担 1-买家承担)
	private int tariffType;

	// 保税区
	private BondedAreaEnum bondedArea;

	// 商品退货渠道
	private ProductRefundChannelEnum productRefundChannel;

	// 商品活动信息
	private ActivityVo activity;

	// 该商品是否免运费
	private boolean freightFree;

	// 是否支持7天无条件退货
	private boolean supportsRtnWithoutReason;

	//是否是预售商品
	private boolean preSale;

	//商品快照版本
	private String productVer;

	//是否psp商品 （psp: prefer sale promotion）
	private boolean pspProduct;

	//运费
	private BigDecimal freight;

	//平台促销优惠金额
	private BigDecimal ymtPromotionAmount;

	/**
	 * 是否是组合商品
	 */
	private boolean subProduct;
	
	/**
	 * 预售订单定金金额
	 */
	private BigDecimal earnestAmount;
	
	/**
	 * 预售订单优惠金额
	 */
	private BigDecimal bookingPromotionAmount;
	
	//客户端无需传入，预售订单二次确认时，交易自动填充
	private long orderItemId;
	
	//商品税率
	private BigDecimal prodTaxRate;
	
	//每日限购
	private boolean buyDailyLimit;
	
	/**
	 * 买手给用户返点比例
	 *
	 */
	private BigDecimal sellerRebateRatio;

	/**
	 * 用户获得返点比例
	 */
	private BigDecimal rebateRatio;

	/**
	 * 推广规则id
	 */
	private String anliPromotionRuleId;
	
	/**
	 * 虚拟库存（只在神器订单中使用）
	 */
	private int virtualProductNum;
	
	/**
	 * 是否满减免运费
	 */
	private Boolean fullReductionFreeFreight;
	
	/**
	 *  神器 是否境内商品，null:未知，true:境内，false:境外
	 */
	private Boolean domesticProduct;
	
	/**
	 *  是否图文商品
	 */
	private Boolean graphicProduct;
	
	/**
	 *  是否奢品
	 */
	private Boolean luxury;
	
	/**
	 * 鉴定标记
	 */
	private Boolean authenticateFlag;

	/**
	 * 鉴别费（单个）
	 */
	private BigDecimal authenticateFee;

	/**
	 * 鉴别费承担方
	 */
	private Integer authenticateFeeType;
	/**
	 * 	新增 字段 20201113 summing 鉴别规则ID
	 * 鉴别规则ID
	 */
	private Long authenticateRuleId;

	public String getProductId() {
		return productId;
	}

	public void setProductId(String productId) {
		this.productId = productId;
	}

	public String getCatalogId() {
		return catalogId;
	}

	public void setCatalogId(String catalogId) {
		this.catalogId = catalogId;
	}

	public StockStatusEnum getStockStatus() {
		return stockStatus;
	}

	public void setStockStatus(StockStatusEnum stockStatus) {
		this.stockStatus = stockStatus;
	}

	public int getProductNum() {
		return productNum;
	}

	public void setProductNum(int productNum) {
		this.productNum = productNum;
	}

	public long getFirstCategoryId() {
		return firstCategoryId;
	}

	public void setFirstCategoryId(long firstCategoryId) {
		this.firstCategoryId = firstCategoryId;
	}

	public long getSecondCategoryId() {
		return secondCategoryId;
	}

	public void setSecondCategoryId(long secondCategoryId) {
		this.secondCategoryId = secondCategoryId;
	}

	public long getThirdCategoryId() {
		return thirdCategoryId;
	}

	public void setThirdCategoryId(long thirdCategoryId) {
		this.thirdCategoryId = thirdCategoryId;
	}

	public long getBrandId() {
		return brandId;
	}

	public void setBrandId(long brandId) {
		this.brandId = brandId;
	}

	public BigDecimal getProductPrice() {
		return productPrice;
	}

	public void setProductPrice(BigDecimal productPrice) {
		this.productPrice = productPrice;
	}

	public BigDecimal getOriginalPrice() {
		return originalPrice;
	}

	public void setOriginalPrice(BigDecimal originalPrice) {
		this.originalPrice = originalPrice;
	}

	public int getTariffType() {
		return tariffType;
	}

	public void setTariffType(int tariffType) {
		this.tariffType = tariffType;
	}

	public BondedAreaEnum getBondedArea() {
		return bondedArea;
	}

	public void setBondedArea(BondedAreaEnum bondedArea) {
		this.bondedArea = bondedArea;
	}

	public ProductRefundChannelEnum getProductRefundChannel() {
		return productRefundChannel;
	}

	public void setProductRefundChannel(
			ProductRefundChannelEnum productRefundChannel) {
		this.productRefundChannel = productRefundChannel;
	}

	public ActivityVo getActivity() {
		return activity;
	}

	public void setActivity(ActivityVo activity) {
		this.activity = activity;
	}

	public PriceTypeEnum getPriceType() {
		return priceType;
	}

	public void setPriceType(PriceTypeEnum priceType) {
		this.priceType = priceType;
	}

	public SalesTypeEnum getSalesType() {
		return salesType;
	}

	public void setSalesType(SalesTypeEnum salesType) {
		this.salesType = salesType;
	}

	public boolean isFreightFree() {
		return freightFree;
	}

	public void setFreightFree(boolean freightFree) {
		this.freightFree = freightFree;
	}

	public boolean isSupportsRtnWithoutReason() {
		return supportsRtnWithoutReason;
	}

	public void setSupportsRtnWithoutReason(boolean supportsRtnWithoutReason) {
		this.supportsRtnWithoutReason = supportsRtnWithoutReason;
	}

	public boolean isPreSale() {
		return preSale;
	}

	public void setPreSale(boolean preSale) {
		this.preSale = preSale;
	}

	public String getProductVer() {
		return productVer;
	}

	public void setProductVer(String productVer) {
		this.productVer = productVer;
	}

	public boolean isPspProduct() {
		return pspProduct;
	}

	public void setPspProduct(boolean pspProduct) {
		this.pspProduct = pspProduct;
	}

	public BigDecimal getFreight() {
		return freight;
	}

	public void setFreight(BigDecimal freight) {
		this.freight = freight;
	}

	public boolean isSubProduct() {
		return subProduct;
	}

	public void setSubProduct(boolean subProduct) {
		this.subProduct = subProduct;
	}

	public String getPictureUrl() {
		return pictureUrl;
	}

	public void setPictureUrl(String pictureUrl) {
		this.pictureUrl = pictureUrl;
	}

	public String getProperty() {
		return property;
	}

	public void setProperty(String property) {
		this.property = property;
	}

	public String getProductName() {
		return productName;
	}

	public void setProductName(String productName) {
		this.productName = productName;
	}

	public String getSku() {
		return sku;
	}

	public void setSku(String sku) {
		this.sku = sku;
	}

	public String getProductRecordNo() {
		return productRecordNo;
	}

	public void setProductRecordNo(String productRecordNo) {
		this.productRecordNo = productRecordNo;
	}

	public BigDecimal getYmtPromotionAmount() {
		return ymtPromotionAmount;
	}

	public void setYmtPromotionAmount(BigDecimal ymtPromotionAmount) {
		this.ymtPromotionAmount = ymtPromotionAmount;
	}

	public long getOrderItemId() {
		return orderItemId;
	}

	public void setOrderItemId(long orderItemId) {
		this.orderItemId = orderItemId;
	}

	public BigDecimal getEarnestAmount() {
		return earnestAmount;
	}

	public void setEarnestAmount(BigDecimal earnestAmount) {
		this.earnestAmount = earnestAmount;
	}

	public BigDecimal getBookingPromotionAmount() {
		return bookingPromotionAmount;
	}

	public void setBookingPromotionAmount(BigDecimal bookingPromotionAmount) {
		this.bookingPromotionAmount = bookingPromotionAmount;
	}

	public BigDecimal getProdTaxRate() {
		return prodTaxRate;
	}

	public void setProdTaxRate(BigDecimal prodTaxRate) {
		this.prodTaxRate = prodTaxRate;
	}

	public boolean isBuyDailyLimit() {
		return buyDailyLimit;
	}

	public void setBuyDailyLimit(boolean buyDailyLimit) {
		this.buyDailyLimit = buyDailyLimit;
	}

	public BigDecimal getSellerRebateRatio() {
		return sellerRebateRatio;
	}

	public void setSellerRebateRatio(BigDecimal sellerRebateRatio) {
		this.sellerRebateRatio = sellerRebateRatio;
	}

	public BigDecimal getRebateRatio() {
		return rebateRatio;
	}

	public void setRebateRatio(BigDecimal rebateRatio) {
		this.rebateRatio = rebateRatio;
	}

	public String getAnliPromotionRuleId() {
		return anliPromotionRuleId;
	}

	public void setAnliPromotionRuleId(String anliPromotionRuleId) {
		this.anliPromotionRuleId = anliPromotionRuleId;
	}

	public int getVirtualProductNum() {
		return virtualProductNum;
	}

	public void setVirtualProductNum(int virtualProductNum) {
		this.virtualProductNum = virtualProductNum;
	}

	public Boolean getFullReductionFreeFreight() {
		return fullReductionFreeFreight;
	}

	public void setFullReductionFreeFreight(Boolean fullReductionFreeFreight) {
		this.fullReductionFreeFreight = fullReductionFreeFreight;
	}

	public Boolean getDomesticProduct() {
		return domesticProduct;
	}

	public void setDomesticProduct(Boolean domesticProduct) {
		this.domesticProduct = domesticProduct;
	}

	public Boolean getGraphicProduct() {
		return graphicProduct;
	}

	public void setGraphicProduct(Boolean graphicProduct) {
		this.graphicProduct = graphicProduct;
	}

	public Boolean getLuxury() {
		return luxury;
	}

	public void setLuxury(Boolean luxury) {
		this.luxury = luxury;
	}

	public Boolean getAuthenticateFlag() {
		return authenticateFlag;
	}

	public void setAuthenticateFlag(Boolean authenticateFlag) {
		this.authenticateFlag = authenticateFlag;
	}

	public BigDecimal getAuthenticateFee() {
		return authenticateFee;
	}

	public void setAuthenticateFee(BigDecimal authenticateFee) {
		this.authenticateFee = authenticateFee;
	}

	public Integer getAuthenticateFeeType() {
		return authenticateFeeType;
	}

	public void setAuthenticateFeeType(Integer authenticateFeeType) {
		this.authenticateFeeType = authenticateFeeType;
	}
	
	public OrderItemVo withBondedArea(BondedAreaEnum bondedArea) {
		
		this.setBondedArea(bondedArea);
		
		return this;
	}
	
	public OrderItemVo withAuthenticateFlag(Boolean authenticateFlag) {
		
		this.setAuthenticateFlag(authenticateFlag);
		
		return this;
	}
	
	public OrderItemVo withAuthenticateFee(BigDecimal authenticateFee) {
		
		this.setAuthenticateFee(authenticateFee);
		
		return this;
	}
	
	public OrderItemVo withAuthenticateFeeType(Integer authenticateFeeType) {
		
		this.setAuthenticateFeeType(authenticateFeeType);
		
		return this;
	}
	
	

	public Long getAuthenticateRuleId() {
		return authenticateRuleId;
	}

	public void setAuthenticateRuleId(Long AuthenticateRuleId) {
		this.authenticateRuleId = AuthenticateRuleId;
	}
	
}
